Skip to content

4112 - OpenCTI VS Connectors - #1597

Open
jayjaybunce wants to merge 14 commits into
developfrom
jb-crasm-4112
Open

jayjaybunce wants to merge 14 commits into
developfrom
jb-crasm-4112

Conversation

@jayjaybunce

@jayjaybunce jayjaybunce commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

🗣 Description

This PR includes code and docker configuration for the building and operation of four VS Connectors for the running OpenCTI Platform in CAWS Staging.

VS Org Ingest Connector
This connector is an External Import connector, the connector pulls VS Organization data, CIDR data, and sector data from the RDS DB and creates a number of OpenCTI objects. OpenCTI entities are created to cover sectors and organizations as their respective names, CIDR data is broken down into the IP's within each CIDR range and these IP's are created as IPv4 Observables in OpenCTI. All three data entities are also linked together to ensure ownership is maintained.

VS Ticket Ingest Connector
This connector is also an External Import connector and pulls Ticket data from the VS data stored in the RDS DB. These tickets are broken down into IPv4 Observables and Vulnerabilities. The IPv4 Observables are linked to the correct organization.

VS Port Ingest Connector
This is the final External Import connector, and simply pulls from the latest_port_scan table, creating Observable IPv4 entities, Observable Network Traffic entities.
*The Network Traffic entity is restrictive and custom fields such as open, closed, service cannot be added. The VS data contains these fields and we should revisit this issue in the future to ensure we surface the same fields and capabilities with this data in OpenCTI.

VS VulnScan Connector
This connector is an Internal Enrichment connector and must be run manually over an Observable, a selection of Observables or a vulnerability. This connector essentially adds notes to the entity it performs enrichment on, including vuln scanning details such as open ports, additional vulnerability details and the like.

Each connector is isolated from the others and includes a dockerfile for building its container.

💭 Motivation and context

Resolves CRASM-4112

🧪 Testing

✅ Pre-approval checklist

  • This PR has an informative and human-readable title.
  • Changes are limited to a single goal - eschew scope creep!
  • All future TODOs are captured in issues, which are referenced in code comments.
  • All relevant type-of-change labels have been added.
  • I have read the CONTRIBUTING document.
  • These code changes follow cisagov code standards.
  • All relevant repo and/or project documentation has been updated to reflect the changes in this PR.
  • Tests have been added and/or modified to cover the changes in this PR.
  • All new and existing tests pass.
  • Bump major, minor, patch, pre-release, and/or build versions as appropriate via the bump_version script if this repository is versioned and the changes in this PR warrant a version bump.
  • Create a pre-release (necessary if and only if the pre-release version was bumped).

✅ Pre-merge checklist

  • Revert dependencies to default branches.
  • Finalize version.

✅ Post-merge checklist

  • Create a release (necessary if and only if the version was bumped).

@cduhn17 cduhn17 left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Be sure to fill out Description and Motivation and context.

Found one medium issue in open-cti/connectors/vs-vulnscan-enrichment/src/connector.py:102-118: note_ids state is persisted before send_stix2_bundle() succeeds. If the send fails, a retry can reuse an ID for an object that was never created, preventing successful re-enrichment. Please persist the state only after a successful bundle submission and add a regression test for the failed-send/retry path. I recommend holding approval until this is addressed.

@jayjaybunce

Copy link
Copy Markdown
Contributor Author

Be sure to fill out Description and Motivation and context.

Found one medium issue in open-cti/connectors/vs-vulnscan-enrichment/src/connector.py:102-118: note_ids state is persisted before send_stix2_bundle() succeeds. If the send fails, a retry can reuse an ID for an object that was never created, preventing successful re-enrichment. Please persist the state only after a successful bundle submission and add a regression test for the failed-send/retry path. I recommend holding approval until this is addressed.

Working on a fix now. Thanks for the suggestion

@rapidray12 rapidray12 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Reviewed in a group call

@nickviola nickviola left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Reviewed in Brown Bag. May need linter errors fixed.

This branch was successfully deployed

1 inactive deployment
staging — 22c0f614 Deployed Oct 27, 2026 by jayjaybunce via staging #1036
integration — 22c0f614 Deployed Oct 27, 2026 by jayjaybunce via integration #1036
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants